/**
 * 微信登录工具类（适配小程序 + App 端）
 */
export default {
  /**
   * 小程序端微信登录
   * @returns {Promise<{code: string}>} 微信登录临时凭证 code
   */
  async miniProgramLogin() {
    return new Promise((resolve, reject) => {
      // 1. 调用微信登录接口获取 code
      uni.login({
        provider: 'weixin',
        success: (res) => {
          if (res.code) {
            resolve(res.code); // 返回 code 给后端换取 Token
          } else {
            reject(new Error(`微信登录失败：${res.errMsg}`));
          }
        },
        fail: (err) => {
          reject(new Error(`微信登录调用失败：${err.errMsg}`));
        }
      });
    });
  },

  /**
   * App 端微信授权登录
   * @returns {Promise<{code: string, userInfo: Object}>} code + 用户基本信息
   */
  async appWechatLogin() {
    return new Promise((resolve, reject) => {
      // 1. 先获取微信授权
      uni.getProvider({
        service: 'oauth',
        success: (providerRes) => {
          if (providerRes.provider.includes('weixin')) {
            // 2. 发起微信授权登录
            uni.oauth({
              provider: 'weixin',
              scope: 'snsapi_userinfo', // 需获取用户信息时使用（静默登录用 snsapi_base）
              success: (oauthRes) => {
                resolve({
                  code: oauthRes.code, // 授权 code（用于后端换取 openid）
                  userInfo: oauthRes.userInfo // 微信返回的用户基本信息（昵称、头像等）
                });
              },
              fail: (err) => {
                reject(new Error(`App 微信登录失败：${err.errMsg}`));
              }
            });
          } else {
            reject(new Error('当前设备未安装微信'));
          }
        },
        fail: (err) => {
          reject(new Error(`获取授权 provider 失败：${err.errMsg}`));
        }
      });
    });
  },

  /**
   * 统一微信登录入口（自动区分小程序/APP 端）
   */
  async wechatLogin() {
    const platform = uni.getSystemInfoSync().platform;
    if (platform === 'mp-weixin') {
      // 小程序端
      const code = await this.miniProgramLogin();
      return { code };
    } else if (platform === 'android' || platform === 'ios') {
      // App 端
      const { code, userInfo } = await this.appWechatLogin();
      return { code, userInfo };
    } else {
      throw new Error('当前平台不支持微信登录');
    }
  }
};